﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using HF.Framework.SqlDataContract;
namespace HF.Framework.DataClient
{

    public interface IDatabase
    {
       
        #region sqlDataItem方式
        /// <summary>
        /// 执行一条sql语句或者存储过程,返回影响的条数 .
        /// 以参数方法访问数据库 
        /// </summary>
        /// <param name="sqlItem">SqlDataItem参数包含commandtext commandtype prameters信息</param>
        /// <returns>返回影响的数据条数</returns>
        int     ExecuteNonQuery(SqlDataItem sqlDataItem);

        /// <summary>
        /// 执行一条sql语句或者存储过程，返回一个数据集
        /// 以参数方法访问数据库. 
        /// </summary>
        /// <param name="sqlItem">SqlDataItem参数包含commandtext commandtype prameters信息</param>
        /// <returns>返回数据集</returns>
        DataSet ExecuteQuery(SqlDataItem sqlDataItem);

        /// <summary>
        /// 执行一条sql语句或者存储过程,返回一个数据表 
        /// 以参数方法访问数据库.  
        /// </summary>
        /// <param name="sqlDataItem">SqlDataItem参数包含commandtext commandtype prameters信息</param>
        /// <returns>返回数据表</returns>
        DataTable ExecuteDataTable(SqlDataItem sqlDataItem);
        /// <summary>
        ///执行一组sql语句或者存储过程,提供数据库事务支持。 
        /// 以参数方式访问数据库. 
        /// </summary>
        /// <param name="arySqlDataItem">SqlDataItemArray 包含一个或多个sqldataitem类型的参数信息</param>
        /// <returns>返回执行结果true成功, false失败.</returns>
        bool    ExecuteNonQueryArray(SqlDataItemArray arySqlDataItem);
        /// <summary>
        /// 执行一条sql语句或者存储过程,返回第一条数据记录的第一个字段的值 
        /// 以参数方法访问数据库.  
        /// </summary>
        /// <param name="sqlDataItem">SqlDataItem参数包含commandtext commandtype prameters信息</param>
        /// <returns>返回一个object类型的值</returns>
        string  ExecuteScalar(SqlDataItem sqlDataItem);
        /// <summary>
        ///  执行一条sql语句或者存储过程,判断符合条的记录是否存在.
        ///  以参数方式访问数据库
        /// </summary>
        /// <param name="sqlItem">SqlDataItem参数包含commandtext commandtype prameters信息</param>
        /// <returns>返回true或者false</returns>
        bool    RecordExists(SqlDataItem sqlDataItem);
       

        #endregion

        #region 获得一个空结构
        DataTable GetBlankTable(string tableName,string databaseName);
        DataSet GetBlankDataSet(List<string> tableNames, string databaseName);
        DataTable GetBlankTable(string tableName);
        DataSet GetBlankDataSet(List<string> tableNames);
        #endregion

        #region 更新数据集
        /// <summary>
        /// 更新数据集，启动数据库事务
        /// </summary>
        /// <param name="ds">数据集</param>
        /// <param name="databaseName">数据库名</param>
        void UpdateDataSetWithTranse(DataSet dataSet, string databaseName);
        /// <summary>
        /// 更新表,启动数据库事务
        /// </summary>
        /// <param name="dataTable">要更新的表</param>
        /// <param name="databaseName">数据库名</param>
        void UpdateDataTableWithTranse(DataTable dataTable,  string databaseName);
        /// <summary>
        /// 更新数据集，启动数据库事务
        /// </summary>
        /// <param name="ds">数据集</param>
        /// <param name="databaseName">数据库名</param>
        void UpdateDataSetWithTranse(DataSet dataSet);
        /// <summary>
        /// 更新表,启动数据库事务
        /// </summary>
        /// <param name="dataTable">要更新的表</param>
        /// <param name="databaseName">数据库名</param>
        void UpdateDataTableWithTranse(DataTable dataTable);
        #endregion

        #region 访问当前数据库中的表和字段
        string     GetCurrentDatabaseName();
        DataSet    GetDBQuery(string databaseName);
        DataTable  GetDBDataTable(string databaseName);
        DataSet    GetDTColumnsQuery(string tableName, string databaseName);
        DataTable  GetDTColumnsDataTable(string tableName, string databaseName);
        string   GetDBDateTime();
        #endregion
    }

         
}
